package ch.zbw.erp.db;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.Properties;

public class DataBase {

	private String url;
	private String driver;
	private String dbName;
	private String userName;
	private String password;
	private Connection conn;

	/**
	 * Konstrukter mit Parameter
	 * 
	 * @param userName
	 * @param password
	 */
	public DataBase(String userName, String password) {
		Properties prop = new Properties();
    	
		try{
			prop.load(new FileInputStream("config/config.properties"));
			this.url = prop.getProperty("url");
			this.dbName = prop.getProperty("dbName");
		}
		catch (IOException ex){
			ex.printStackTrace();
		}
		this.driver = "com.mysql.jdbc.Driver";
		this.userName = userName;
		this.password = password;
		this.conn = null;
	}

	public boolean mySQLconnect() {
		// Test MySQL Database Connection to Christoph
		try {

			this.conn = DriverManager.getConnection(this.url+this.dbName,
					userName, password);
			if (this.conn != null) {
				// System.out.println("Database is Open");
				return true;
			}
			// System.out.println("Faild Database is not Open");
			return false;
		} catch (Exception e) {
			return false;
		}
	}

	public boolean mySQLdisconnect() {
		try {

			if (this.conn.isClosed()) {
				// System.out.println("Database is Closed");
				return true;
			} else {
				this.conn.close();
				return true;
			}
		} catch (SQLException e) {
			e.printStackTrace();
			return false;
		}
	}
	
	public ArrayList<String> lieferanten(){

		String vQuery = "select Firma from vOffeneLieferantenBestellungen GROUP by Firma";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
			ArrayList<String> list = new ArrayList<String>();
			
			
			while(lief.next()) {
				list.add(lief.getString("Firma"));
			}
			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}	
	}
	
	public ArrayList<String> getartikelListe(){

		String vQuery = "select Artikelnummer from vartikel";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
			ArrayList<String> list = new ArrayList<String>();
			
			
			while(lief.next()) {
				list.add(lief.getString("Artikelnummer"));
			}
			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}	
	}
	
	public String[][] vOffeneLiferantenBetsetllungen(){

		String vQuery = "select * from vOffeneLieferantenBestellungen";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
		    lief.last();
			//System.out.println(rs.getRow());
			String[][] list = new String[lief.getRow()][11];
			int c=0;
			lief.first();
			list[c][0]= lief.getString("ID");
			list[c][1]= lief.getString("Auftragsnummer");
			list[c][2]= lief.getString("BearbeitungsDatum");
			list[c][3]= lief.getString("Firma");
			list[c][4]= lief.getString("Name");
			list[c][5]= lief.getString("Strasse");
			list[c][6]= lief.getString("PLZ");
			list[c][7]= lief.getString("Ort");
			list[c][8]= lief.getString("Artikelnummer");
			list[c][9]= lief.getString("Artikelbezeichnung");
			list[c][10]= lief.getString("Anzahl");
			c++;
			
			while(lief.next()) {
					list[c][0]= lief.getString("ID");
					list[c][1]= lief.getString("Auftragsnummer");
					list[c][2]= lief.getString("BearbeitungsDatum");
					list[c][3]= lief.getString("Firma");
					list[c][4]= lief.getString("Name");
					list[c][5]= lief.getString("Strasse");
					list[c][6]= lief.getString("PLZ");
					list[c][7]= lief.getString("Ort");
					list[c][8]= lief.getString("Artikelnummer");
					list[c][9]= lief.getString("Artikelbezeichnung");
					list[c][10]= lief.getString("Anzahl");
					c++;
			}			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}	
	}
	
	public String[][] vOffeneLiferantenBetsetllungen(String Firma){

		String vQuery = "select * from vOffeneLieferantenBestellungen WHERE Firma='"+Firma+"'";
		//System.out.println(vQuery);
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
		    lief.last();
			//System.out.println(rs.getRow());
			String[][] list = new String[lief.getRow()][11];
			int c=0;
			lief.first();
			list[c][0]= lief.getString("ID");
			list[c][1]= lief.getString("Auftragsnummer");
			list[c][2]= lief.getString("BearbeitungsDatum");
			list[c][3]= lief.getString("Firma");
			list[c][4]= lief.getString("Name");
			list[c][5]= lief.getString("Strasse");
			list[c][6]= lief.getString("PLZ");
			list[c][7]= lief.getString("Ort");
			list[c][8]= lief.getString("Artikelnummer");
			list[c][9]= lief.getString("Artikelbezeichnung");
			list[c][10]= lief.getString("Anzahl");
			c++;
			
			while(lief.next()) {
					list[c][0]= lief.getString("ID");
					list[c][1]= lief.getString("Auftragsnummer");
					list[c][2]= lief.getString("BearbeitungsDatum");
					list[c][3]= lief.getString("Firma");
					list[c][4]= lief.getString("Name");
					list[c][5]= lief.getString("Strasse");
					list[c][6]= lief.getString("PLZ");
					list[c][7]= lief.getString("Ort");
					list[c][8]= lief.getString("Artikelnummer");
					list[c][9]= lief.getString("Artikelbezeichnung");
					list[c][10]= lief.getString("Anzahl");
					c++;
			}			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}	
	}
	
	public String[][] vArtikel(){

		String vQuery = "select * from vartikel";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
		    lief.last();
			//System.out.println(rs.getRow());
			String[][] list = new String[lief.getRow()][11];
			int c=0;
			lief.first();
			list[c][0]= lief.getString("ArtikelID");
			list[c][1]= lief.getString("Artikelnummer");
			list[c][2]= lief.getString("Artikelbezeichnung");
			list[c][3]= lief.getString("Lagerbestand");
			list[c][4]= lief.getString("Mindestbestand");
			list[c][5]= lief.getString("Verkaufspreis");
			list[c][6]= lief.getString("Mehrwertsteuersatz");
			list[c][7]= lief.getString("Lieferdatum");
			c++;
			
			while(lief.next()) {
					list[c][0]= lief.getString("ArtikelID");
					list[c][1]= lief.getString("Artikelnummer");
					list[c][2]= lief.getString("Artikelbezeichnung");
					list[c][3]= lief.getString("Lagerbestand");
					list[c][4]= lief.getString("Mindestbestand");
					list[c][5]= lief.getString("Verkaufspreis");
					list[c][6]= lief.getString("Mehrwertsteuersatz");
					list[c][7]= lief.getString("Lieferdatum");
					c++;
			}			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}	
	}
	public String[][] vLohnabrechnung(){

		String vQuery = "select * from vMitarbeiterLohnabrechnung";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
		    lief.last();
			//System.out.println(rs.getRow());
			String[][] list = new String[lief.getRow()][11];
			int c=0;
			lief.first();
			list[c][0]= lief.getString("Monat").toString();
			list[c][1]= lief.getString("Ausgefuehrt").toString();
			list[c][2]= lief.getString("Vorname").toString();
			list[c][3]= lief.getString("Nachname").toString();
			c++;
			
			while(lief.next()) {
					list[c][0]= lief.getString("Monat").toString();
					list[c][1]= lief.getString("Ausgefuehrt").toString();
					list[c][2]= lief.getString("Vorname").toString();
					list[c][3]= lief.getString("Nachname").toString();
					c++;
			}			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}	
	}
	
	public void vLagebuchung(String artNr, String anzahl){

		String vQuery = "call ERP.pLagerbuchung("+artNr+","+anzahl+")";
		Statement stm;
		//System.out.println(vQuery);
		try{
			stm = conn.createStatement();
			stm.executeQuery(vQuery);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			
		}	
	}
	public String[][] getAbtLohn() {
		String vQuery = "SELECT * FROM `vAbteilungsLoehne`";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
		    lief.last();
			//System.out.println(rs.getRow());
			String[][] list = new String[lief.getRow()][11];
			int c=0;
			lief.first();
			list[c][0]= lief.getString("Abteilungsnummer");
			list[c][1]= lief.getString("Bezeichnung");
			list[c][2]= lief.getString("Summe");
			c++;
			
			while(lief.next()) {
				list[c][0]= lief.getString("Abteilungsnummer");
				list[c][1]= lief.getString("Bezeichnung");
				list[c][2]= lief.getString("Summe");
					c++;
			}			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	
	public String[][] getDetailLohn() {
		String vQuery = "SELECT * FROM `vDetailLohnabrechung`";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
		    lief.last();
			//System.out.println(rs.getRow());
			String[][] list = new String[lief.getRow()][11];
			int c=0;
			lief.first();
			list[c][0]= lief.getString("Monat");
			list[c][1]= lief.getString("Ausgefuehrt");
			list[c][2]= lief.getString("Lohn");
			list[c][3]= lief.getString("Vorname");
			list[c][4]= lief.getString("Nachname");
			c++;
			
			while(lief.next()) {
				list[c][0]= lief.getString("Monat");
				list[c][1]= lief.getString("Ausgefuehrt");
				list[c][2]= lief.getString("Lohn");
				list[c][3]= lief.getString("Vorname");
				list[c][4]= lief.getString("Nachname");
				c++;
			}			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	public String[][] getJahresumsatzStark(String ja) {
		String vQuery = "call pUmsatzStarkJahr("+ja+")";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
		    lief.last();
			//System.out.println(rs.getRow());
			String[][] list = new String[lief.getRow()][11];
			int c=0;
			lief.first();
			list[c][0]= lief.getString("Artikelnummer");
			list[c][1]= lief.getString("ArtikelBezeichnung");
			list[c][2]= lief.getString("Anzahl");
			c++;
			
			while(lief.next()) {
				list[c][0]= lief.getString("Artikelnummer");
				list[c][1]= lief.getString("ArtikelBezeichnung");
				list[c][2]= lief.getString("Anzahl");
				c++;
			}			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	
	public String[][] getMonatsumsatzStark(String ja, String mo) {
		// TODO Auto-generated method stub
		String vQuery = "call pUmsatzStarkMonat("+mo+","+ja+")";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
		    lief.last();
			//System.out.println(rs.getRow());
			String[][] list = new String[lief.getRow()][11];
			int c=0;
			lief.first();
			list[c][0]= lief.getString("Artikelnummer");
			list[c][1]= lief.getString("ArtikelBezeichnung");
			list[c][2]= lief.getString("Anzahl");
			c++;
			
			while(lief.next()) {
				list[c][0]= lief.getString("Artikelnummer");
				list[c][1]= lief.getString("ArtikelBezeichnung");
				list[c][2]= lief.getString("Anzahl");
				c++;
			}			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	
	public String[][] getJahresumsatzSchwach(String ja) {
		String vQuery = "call pUmsatzSchwachJahr("+ja+")";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
		    lief.last();
			//System.out.println(rs.getRow());
			String[][] list = new String[lief.getRow()][11];
			int c=0;
			lief.first();
			list[c][0]= lief.getString("Artikelnummer");
			list[c][1]= lief.getString("ArtikelBezeichnung");
			list[c][2]= lief.getString("Anzahl");
			c++;
			
			while(lief.next()) {
				list[c][0]= lief.getString("Artikelnummer");
				list[c][1]= lief.getString("ArtikelBezeichnung");
				list[c][2]= lief.getString("Anzahl");
				c++;
			}			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	
	public String[][] getMonatsumsatzSchwach(String ja, String mo) {
		// TODO Auto-generated method stub
		String vQuery = "call pUmsatzSchwachMonat("+mo+","+ja+")";
		Statement stm;
		try {
			stm = conn.createStatement();
			ResultSet lief = stm.executeQuery(vQuery);
		    lief.last();
			//System.out.println(rs.getRow());
			String[][] list = new String[lief.getRow()][11];
			int c=0;
			lief.first();
			list[c][0]= lief.getString("Artikelnummer");
			list[c][1]= lief.getString("ArtikelBezeichnung");
			list[c][2]= lief.getString("Anzahl");
			c++;
			
			while(lief.next()) {
				list[c][0]= lief.getString("Artikelnummer");
				list[c][1]= lief.getString("ArtikelBezeichnung");
				list[c][2]= lief.getString("Anzahl");
				c++;
			}			
			return list;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * @return the driver
	 */
	public String getDriver() {
		return driver;
	}

	/**
	 * @param driver the driver to set
	 */
	public void setDriver(String driver) {
		this.driver = driver;
	}
}